(() => {

    // 定义一个函数
    function showMsg<T>(msg: T): T {
        return msg
    }

    // 定义一个泛型接口
    interface ShowMsgInterface {
        <T>(msg: T): T
    }

    // 1.函数注解方式
    let showMsg1: <T>(msg: T) => T = showMsg
    console.log(showMsg1('函数注解方式'));


    // 2.对象字面量的方式
    let showMsg2: { <T>(msg: T): T } = showMsg
    console.log(showMsg2('对象字面量的方式'));

    // 3.泛型接口定义方式
    let showMsg3: ShowMsgInterface = showMsg
    console.log(showMsg3('泛型接口方式'));


    // 4. 泛型接口 + 箭头函数
    let showMsg4: ShowMsgInterface = <T>(msg: T): T => {
        return msg
    }
    console.log(showMsg4(1));
    console.log(showMsg4('2'));


})()